home *** CD-ROM | disk | FTP | other *** search
- dosseg
- stacks segment byte stack 'stack'
- thestak db 256 dup(0h)
- stacks ends
-
- code segment byte public 'code'
- assume cs:code, es:code, ds:code, ss:stacks
- start:
-
- mov ax,es
- mov ds,ax
- mov si,128
- lodsb
- xor cx,cx
- mov cl,al
- mov [inputlength],cx
- mov ax,cs
- mov es,ax
- mov di,offset inputstring
- rep movsb
-
- jmp main
-
- ;===- data -===
-
- credits db 13,10,"TGA Palette Grabber",13,10
- db " By Ben Gardner",13,10,"$"
-
- properuse db "TGA Palette Grabber:",13,10
- db " Use: GETPAL Filename ",13,10
- db "Directory paths not supported.$",13,10,'$'
-
- inputstring db 255 dup ('~')
- inputlength dw 0
-
- filename db "12345678.tga",0,0,0,0
-
- ErrorLook dw offset properuse,offset properuse,offset Nofile
- dw offset Nopath,offset Nohandle,OFFSET Noaccess
-
-
- nofile db 10,13,"File not found error.$"
- nopath db 10,13,"Path not found error.$"
- nohandle db 10,13,"No handles available.$"
- noaccess db 10,13,"Access to file denied.$"
- errormes db 10,13,"Program aborted.$"
- diskfull db 10,13,"Disk full.$"
-
- result db 10,13,"Program was successful. Cut palette stored in "
- PalName db "12345678.pal",0,0,0,'$'
-
-
- fileshand dw 0000h
- filedhand dw 0000h
-
- bufferit dw 768 dup (0)
-
- ;========- SubRoutines -========
- Waitkey proc near
- here:
- mov ah,1
- int 16h ; has a key been pressed?
- jz HERE ; no, goto HERE
- mov ah,0
- int 16h ; yes, get the character
- ret
- waitkey endp
-
- GetCommand proc near
- mov ax,es
- mov ds,ax
- mov si,128
- lodsb
- xor cx,cx
- mov cl,al
- mov [inputlength],cx
- mov ax,cs
- mov es,ax
- mov di,offset inputstring
- mov al,cl
- rep movsb
- ret
- GetCommand endp
-
- CaptureFilename proc near
- mov ax,cs
- mov ds,ax
- mov es,ax
- mov si,offset inputstring
- mov di,offset filename
- xor bl,bl
- Nospace:
- lodsb
- cmp al,'~'
- je capdone
- cmp al,' '
- je nospace
- stosb
- inc bl
- cmp bl,8
- jb nospace
- Capdone:
- mov al,'.'
- stosb
- mov al,'t'
- stosb
- mov al,'g'
- stosb
- mov al,'a'
- stosb
- mov al,0
- stosb
- mov al,'$'
- stosb
- mov di,offset palname
- mov si,offset filename
- mov cx,14
- rep movsb
- mov di,offset palname+1 ;+1 to get past dot
- xor bh,bh
- add di,bx ;bx = 0 thru 7
- mov al,'p'
- stosb
- mov al,'a'
- stosb
- mov al,'l'
- stosb
- ret
- CaptureFileName endp
-
- ;THIS STUFF SETS UP THE PALETTE FOR USE OF TGA TYPE PALETTES
-
- palettesetup proc near
- mov dx,offset bufferit
- mov di,dx
- mov si,dx
- mov cx,768
- cld
- DIVIDE:
- lodsb ; this routine divides by four
- shr al,1
- shr al,1
- stosb
- dec cx
- jne divide
-
- mov cx,256 ; no of registers to xchange
- mov di,dx
- mov si,dx ; point di to red
- inc si ; and si to blue
- inc si
- switchrb: ; switches red and blue registers
- mov al,[di]
- mov ah,[si]
- mov [si],al
- mov [di],ah
- add di,3
- add si,3
- dec cx
- jne switchrb
- ret
-
- palettesetup endp
-
-
- ;============================
- Main:
- ;call getcommand
- cmp [inputlength],0
- jne gotsome
- jmp noinput
- Gotsome:
- mov ax,cs
- mov es,ax
- mov ds,ax
- call capturefilename
-
- openfiles:
- mov dx,offset filename ;load in palette
- sub al,al
- mov ah,3dh
- int 21h
- jc abort
- mov bx,ax
-
- sub cx,cx ;18 past beginning
- mov dx,18
- mov ax,4200h
- int 21h
-
- mov cx,768 ;read 768 bytes
- mov dx,offset bufferit
- mov ah,3fh
- int 21h
-
- mov ah,3eh ;close source file
- int 21h
-
- call palettesetup
-
- mov dx,offset palname
- sub cx,cx
- mov ah,3ch
- int 21h
- jc abort
- mov bx,ax
-
- mov cx,768 ; the dest file
- mov ah,40h ; load function write
- mov dx,offset bufferit ;
- int 21h ; write it
-
- cmp ax,cx
- je success
- mov ah,9 ; disk full error
- mov dx,offset diskfull ;
- int 21h ;
- success:
- mov ah,3eh ;close source file
- int 21h
- mov ah,9
- mov dx,offset result
- int 21h
- jmp endit
- abort:
- push ax
- mov ah,3eh
- int 21h
- pop ax
- cmp ax,6
- jb displayerror
- jmp noinput
- Displayerror:
- mov bx,ax
- shl bx,1
- mov dx,errorlook[bx]
- mov ah,9 ; Print string
- int 21h ;
- mov ah,9
- mov dx,offset errormes
- int 21h
-
- endit:
- mov ax,4c00h ; return control to
- int 21h ; DOS and exit
-
- Noinput:
- mov ax,cs
- mov ds,ax
- mov es,ax
- mov ah,9
- mov dx,offset properuse
- int 21h
- mov ax,4c00h
- int 21h
-
- code ends
- end start
-